Zeelam's Blog.

Spring Cloud的正确使用姿势3 - 服务治理之Eureka

字数统计: 1,210阅读时长: 4 min
2019/05/07 Share

关于Eureka

其实Eureka从2.0版本以上已经不再开源了,但是为什么还是要写Eureka呢。其实服务治理的核心就那么几点(具体后面会说:),而且Eureka只要不使用2.0版本以上的分支,完全没有关系,会使用了Eureka,换其他的其实也是差不多的。

一个例子🌰告诉你为啥需要服务治理

微服务的理念相信大家也知道,就是把服务(生产者)尽可能的拆分,客户(消费者)需要哪个服务就调用哪个服务。这样方便对一些需要做集群的服务做集群,并且一个服务挂了,也不会导致其他服务挂掉。

那么这样就会导致一个问题:作为一个客户,我怎么知道去哪里调用(消费)服务呢?

下面举个例子虽然说的不太恰当,但是大家意会一下就好:

学校里有很多学生和老师,学生需要学习知识,老师需要教授知识。那么把我们的应用,实际上就可以看成学校,而学校的老师就是服务的生产者,学生则是消费者。

简单点来说,一个学生,他需要学习的内容,可能有语文、数学、英语,各种需求。而老师不是万能的,就像你不能让体育老师来教你数学一样,那么老师就是一个个服务,有专门教语文的语文老师,提供给你教语文的服务,数学老师提供给你教数学的服务…

起初只有语文、数学、英语三个科目,没多少学生的时候是没什么问题的。学生只要记住某个老师教什么,有问题直接找他们就OK了。简化成伪代码就像这样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@RestController
public class QuestionController{
// 假设语文老师的办公室地址是192.168.1.20
public static final String CHINESE_ADDR = "http://192.168.1.20/questions/";
// 假设数学老师的办公室地址是192.168.1.21
public static final String MATH_ADDR = "http://192.168.1.21/questions/";
// 假设英语老师的办公室地址是192.168.1.22
public static final String ENGLISH_ADDR = "http://192.168.1.22/questions/";

// 假设把每个问题固定有一个id,比方说 1号问题 什么是拼音 2号问题 什么是反问句...
@RequestMapping("/chinese/{id}")
public JsonResult getChineseAnwers(@PathVariable("id") Long id){
// 假设我们已经封装好了一个网络请求类,会发送请求,并会封装好,返回我们需要的类型
return HttpRequestUtil.get(CHINESE_ADDR + id, JsonResult.class);
}

@RequestMapping("/math/{id}")
public JsonResult getMathAnwers(@PathVariable("id") Long id){
// 假设我们已经封装好了一个网络请求类,会发送请求,并会封装好,返回我们需要的类型
return HttpRequestUtil.get(MATH_ADDR + id, JsonResult.class);
}

// 英语我就忽略了...
}

其实这样就完成了最最最简化的一个微服务,当学生(消费者)需要问问题(消费)的时候,他就到QuestionController里面,找到对应的方法,而学生这个时候能记得住各个老师(生产者)是谁,所以他们只要直接问问题(调用服务)就OK了。

那么问题来了,如果换做是一个大学呢。学科分支那么多的情况下,学生、老师也特别多的情况下,没有办法硬性规定学生必须记住每个老师的名字、科目、办公室。这个时候咋办,教务主任就出现了,他想了个办法,每个学生入学的时候,都给他们一个手册,这个手册里面记录了,每个老师什么名字、教什么、办公室在哪。学生只要想问问题,就查一查手册,直接过去就好了。然后有新老师来学校入职,就过来给教务主任报道,他叫什么名字、教什么、办公室在哪,然后教务主任更新手册,以便学生们知道哪个老师已经离职了,后面没法找他问问题了,新来的老师可以问什么问题。

简而言之,成立了一个消费者和生产者中间用于沟通的注册中心,而Eureka就是这样的一个角色。(下图中,注册中心,就是Eureka的角色)

怎么使用Eureka

Eureka实际上分为两部分,一个是服务端,一个是客户端,那么其实也很清楚了,服务端就是注册中心,而客户端就是消费者或者生产者。没有服务,也就不存在客户,所以肯定是要先搭建服务端。

服务端搭建

引入pom文件

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
目录
  1. 1. 关于Eureka
  2. 2. 一个例子🌰告诉你为啥需要服务治理
  3. 3. 怎么使用Eureka
    1. 3.1. 服务端搭建
      1. 3.1.1. 引入pom文件